<?php
/**
 * @author DXing1202 <dxing1202@outlook.com>
 * @copyright dxing1202.cn
 * @time 2018/2/24
 * @Licensed GPL
 */
namespace app\admin\model;

use think\Model;
use Config; // 因为系统做了类库别名，其实就是调用think\facade\Config
use think\facade\Session;

/**
* Admins 模型 [管理员管理]
* Class Admins
* @package app\admin\model
*/
class Admins extends Model{

  # 自动完成
  protected $auto = ['salt'];

  # 自动时间戳设置
  protected $autoWriteTimestamp = true; // 开启时间戳功能 或者 关闭
  // 定义时间戳字段名
  // protected $createTime = 'admin_create_time';
  protected $updateTime = false; // 可以关闭其中的某一项


  // 模型修改器 测试方法
  // 更改password字段会自动转换为md5()加密
  // 模型里函数名定义 set+字段名(大驼峰)+Attr 必须这样规范
  // 有第二个参数引入
  public function setPassAttr($value,$data){
    # 没办法同步盐值 。 暂时不使用盐值
    // return md5($value . $this->salt() . Config::get('APP_TOKEN'));
    return md5($value);
    # 可以在这里直接引入数据里面的值
    // return $value . $data['email'];
  }

  /**
	 * 加强密码强度(盐)
	 * @return string 8个字符的字符串
	 */
	public function setSaltAttr(){
    $str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    // str_shuffle() 函数随机地打乱字符串中的所有字符。
    // substr() 函数返回字符串的一部分。
    return substr(str_shuffle($str),0,6);
	}

  # 模型获取器
  # 直接在layui里面的 js文件中修改
  // 更改grade字段会自动转换为字符串
  // 模型里函数名定义 get+字段名(大驼峰)+Attr 必须这样规范
  // 实参里面有第二个参数 $data 自动加载进函数
  // public function getGradeAttr($value){
    # 这里的$value 直接获取到数据表的Sex值
    // 使用switch方式
    // switch($value){
    //   case '0':
    //     return '普通管理员';
    //     break;
    //   case '1':
    //     return '超级管理员';
    //     break;
    //   default:
    //     return '未知';
    //     break;
    // }
    // 数组方式
    // $sex = [0=>'未知',1=>'男',2=>'女'];
    // return $sex[$value];
  // }

  /**
   * 添加数据
   * @param [array] $data 添加的数据
   * @return $admins->id 添加成功后的id
   */
  public static function addData($data){
    $admins = Admins::create($data);
    return $admins->id;
  }

  /**
   * 分页获取所有数据
   * @param [int] $page 第几页
   * @param [int] $limit 每页多少条数据
   */
  public static function getAllData($page,$limit){
    // return Admins::all();
    return Admins::page($page,$limit)->select();
  }

  /**
   * 修改数据
   * @param [int] $id 修改数据的id
   * @param [array] $data 修改的数据
   * @return $admins->id 返回影响的记录数
   */
  public static function editData($id,$data){
    return Admins::where('id',$id)->update($data);
  }

  /**
   * 修改数据的时候 检测密码是否和旧密码相同
   * @param  [int] $id   id值
   * @param  [string] $pass 密码值
   * @return [bool]
   */
  public static function checkPass($id,$pass){
    $res = Admins::where('id',$id)->value('pass');
    if($res == $pass){
      return true;
    }else{
      return false;
    }
  }

  # 暂时报废
  /**
   * 修改数据的  检测数据是否和旧数据不相同
   * @param  [array] $arr 检测的数据
   * @return [bool]
   */
  public static function checkData($arr){
    $res = Admins::where('id',$arr['id'])->select();
    if($res['name'] === $arr['name']){
      return false;
    }else{
      return false;
    }
  }

  /**
   * 根据主键删除数据
   * @param  [int/string/array] $id 主键
   * @return [int]   返回成功删除后的行数
   */
  public static function delData($id){
    return Admins::destroy($id);
  }

  /**
   * 管理员登录操作
   * @param  string  $adminsName  用户名
   * @param  string  $password 密码
   * @return string  提示词
   */
  public static function checkLogin($adminsName,$password){
      $adminsData = Admins::where('name','eq',$adminsName)->find();

      //  如果查找到数据
      if ( $adminsData ){
          //  获取该用户信息对应的盐值
          // $salt = $adminsData['salt'];
          //  将密码进行 MD5 加密，将其与数据库中的密码字符串作对比，看看匹不匹配
          $newPassword = md5($password);
          if ( $adminsData['pass'] == $newPassword ){
              //  获得用户所在ID
              $id = $adminsData['id'];
              //  设置session，用于首页访问，不存在，则返回到登录页面
              Session::set('id',$id);
              Session::set('adminsName',$adminsName);
              return 0; // 返回false js执行登录成功
          }else{
              return '密码错误';
          }
      }else{
          return '该管理员不存在';
      }
  }




}
